namespace FreshMeat.Xaml
{
   /// <summary>
   /// Describes a drag operation and provides a mechanism by which feedback can be supplied
   /// about whether or not the operation can be performed.
   /// </summary>
   public class DragDescription
   {
      /// <summary>
      /// The data context associated with the source element, from which the 
      /// element would be removed if the operation were completed. 
      /// This is typically the model from which an ItemsControl is getting its items.
      /// </summary>
      public object Source { get; private set; }

      /// <summary>
      /// The data context associated with the element being dragged.
      /// </summary>
      public object Item { get; private set; }

      /// <summary>
      /// The data context associated with the target element, to which the 
      /// element would be added if the operation were completed.
      /// This is typically the model from which an ItemsControl is getting its items.
      /// </summary>
      public object Target { get; private set; }

      /// <summary>
      /// When a drag operation is blocked, this can be used to provide an explanation to the user.
      /// </summary>
      public string Feedback { get; set; }

      public DragDescription(object source, object item, object target)
      {
         Source = source;
         Item = item;
         Target = target;
      }
   }
}